//! # 性能监控核心接口定义
//! 
//! 本模块定义了RustCloud框架性能监控的核心接口。

use rustcloud_core::ServiceResult;
use std::time::Duration;

/// 性能监控器接口
#[async_trait::async_trait]
pub trait PerformanceMonitorTrait: Send + Sync {
    /// 启动性能监控
    async fn start(&self) -> ServiceResult<()>;
    
    /// 停止性能监控
    async fn stop(&self) -> ServiceResult<()>;
    
    /// 获取当前系统指标
    async fn get_current_metrics(&self) -> Option<SystemMetrics>;
    
    /// 获取历史指标
    async fn get_metrics_history(&self, limit: Option<usize>) -> Vec<SystemMetrics>;
    
    /// 获取警报历史
    async fn get_alert_history(&self, limit: Option<usize>) -> Vec<PerformanceAlert>;
    
    /// 获取性能摘要
    async fn get_performance_summary(&self) -> PerformanceSummary;
}

/// 系统性能指标
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct SystemMetrics {
    /// CPU使用率 (0.0-1.0)
    pub cpu_usage: f64,
    /// 内存使用情况
    pub memory: MemoryMetrics,
    /// 网络统计
    pub network: NetworkMetrics,
    /// 进程统计
    pub process: ProcessMetrics,
    /// 采集时间
    pub timestamp: u64,
}

/// 内存使用指标
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct MemoryMetrics {
    /// 总内存（字节）
    pub total: u64,
    /// 已使用内存（字节）
    pub used: u64,
    /// 可用内存（字节）
    pub available: u64,
    /// 使用率 (0.0-1.0)
    pub usage_percent: f64,
    /// 堆内存使用（字节）
    pub heap_used: u64,
    /// 堆内存总量（字节）
    pub heap_total: u64,
}

/// 网络使用指标
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct NetworkMetrics {
    /// 接收字节数
    pub bytes_received: u64,
    /// 发送字节数
    pub bytes_sent: u64,
    /// 接收包数
    pub packets_received: u64,
    /// 发送包数
    pub packets_sent: u64,
    /// 网络错误数
    pub errors: u64,
    /// 活跃连接数
    pub active_connections: u32,
}

/// 进程使用指标
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct ProcessMetrics {
    /// 进程ID
    pub pid: u32,
    /// CPU使用率 (0.0-1.0)
    pub cpu_usage: f64,
    /// 内存使用（字节）
    pub memory_usage: u64,
    /// 线程数
    pub thread_count: u32,
    /// 文件描述符数
    pub fd_count: u32,
    /// 运行时间（秒）
    pub uptime: u64,
}

/// 性能警报级别
#[derive(Debug, Clone, PartialEq, Eq, serde::Serialize, serde::Deserialize)]
pub enum AlertLevel {
    Info,
    Warning,
    Critical,
}

/// 性能警报
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
pub struct PerformanceAlert {
    /// 警报级别
    pub level: AlertLevel,
    /// 警报类型
    pub alert_type: String,
    /// 警报消息
    pub message: String,
    /// 当前值
    pub current_value: f64,
    /// 阈值
    pub threshold: f64,
    /// 发生时间
    pub timestamp: u64,
    /// 相关指标
    pub metrics: SystemMetrics,
}